<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.6"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>AngelScript: Using namespaces</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
  $(document).ready(function() { init_search(); });
/* @license-end */
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="aslogo_small.png"/></td>
  <td id="projectalign">
   <div id="projectname">AngelScript
   </div>
  </td>
    <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <span id="MSearchSelect"                onmouseover="return searchBox.OnSearchSelectShow()"                onmouseout="return searchBox.OnSearchSelectHide()">&#160;</span>
          <input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.svg" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.6 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('doc_adv_namespace.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div><div class="header">
  <div class="headertitle"><div class="title">Using namespaces </div></div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Namespaces can be used to group related functions and other entities together. Doing so avoids potential conflicts with other entities that happen to use the same name, but is otherwise unrelated.</p>
<p>Namespaces can be used in the application registered interface, as well as in the <a class="el" href="doc_global_namespace.html">scripts</a>.</p>
<h1><a class="anchor" id="doc_adv_namespace_reg"></a>
Registering the interface with namespaces</h1>
<p>To register a function, or other entity in a specific namespace, the application should first call the method <a class="el" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">SetDefaultNamespace</a> to define the desired namespace. After that the registration follows the normal procedure as described in the <a class="el" href="doc_register_api_topic.html">chapter on registering the interface</a>.</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> RegisterInNamespace(<a class="code hl_class" href="classas_i_script_engine.html">asIScriptEngine</a> *engine)</div>
<div class="line">{</div>
<div class="line">  <span class="keywordtype">int</span> r;</div>
<div class="line"> </div>
<div class="line">  <span class="comment">// Register the type and function in the namespace</span></div>
<div class="line">  r = engine-&gt;<a class="code hl_function" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">SetDefaultNamespace</a>(<span class="stringliteral">&quot;myspace&quot;</span>); assert( r &gt;= 0 );</div>
<div class="line">  r = engine-&gt;<a class="code hl_function" href="classas_i_script_engine.html#a29c6c087c8c5b5cdb6271cfd161cc5a6">RegisterObjectType</a>(<span class="stringliteral">&quot;mytype&quot;</span>, 0, <a class="code hl_enumvalue" href="angelscript_8h.html#a855d86fa9ee15b9f75e553ee376b5c7aa9450e038342b36c745858d2e5ae4b861">asOBJ_REF</a>); assert( r &gt;= 0 );</div>
<div class="line">  r = engine-&gt;<a class="code hl_function" href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">RegisterGlobalFunction</a>(<span class="stringliteral">&quot;void myfunc()&quot;</span>, <a class="code hl_define" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a>(myfunc), <a class="code hl_enumvalue" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a>); assert( r &gt;= 0 );</div>
<div class="line">}</div>
<div class="ttc" id="aangelscript_8h_html_a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4"><div class="ttname"><a href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4">asCALL_CDECL</a></div><div class="ttdeci">@ asCALL_CDECL</div><div class="ttdoc">A cdecl function.</div><div class="ttdef"><b>Definition:</b> angelscript.h:230</div></div>
<div class="ttc" id="aangelscript_8h_html_a78f8f2c7f1c88b12e74a5ac47b4184ae"><div class="ttname"><a href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae">asFUNCTION</a></div><div class="ttdeci">#define asFUNCTION(f)</div><div class="ttdoc">Returns an asSFuncPtr representing the function specified by the name.</div><div class="ttdef"><b>Definition:</b> angelscript.h:685</div></div>
<div class="ttc" id="aangelscript_8h_html_a855d86fa9ee15b9f75e553ee376b5c7aa9450e038342b36c745858d2e5ae4b861"><div class="ttname"><a href="angelscript_8h.html#a855d86fa9ee15b9f75e553ee376b5c7aa9450e038342b36c745858d2e5ae4b861">asOBJ_REF</a></div><div class="ttdeci">@ asOBJ_REF</div><div class="ttdoc">A reference type.</div><div class="ttdef"><b>Definition:</b> angelscript.h:254</div></div>
<div class="ttc" id="aclassas_i_script_engine_html"><div class="ttname"><a href="classas_i_script_engine.html">asIScriptEngine</a></div><div class="ttdoc">The engine interface.</div><div class="ttdef"><b>Definition:</b> angelscript.h:1102</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a29c6c087c8c5b5cdb6271cfd161cc5a6"><div class="ttname"><a href="classas_i_script_engine.html#a29c6c087c8c5b5cdb6271cfd161cc5a6">asIScriptEngine::RegisterObjectType</a></div><div class="ttdeci">virtual int RegisterObjectType(const char *obj, int byteSize, asDWORD flags)=0</div><div class="ttdoc">Registers a new object type.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a2f84b9b51733f22c68b8448b02c2f1c7"><div class="ttname"><a href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7">asIScriptEngine::RegisterGlobalFunction</a></div><div class="ttdeci">virtual int RegisterGlobalFunction(const char *declaration, const asSFuncPtr &amp;funcPointer, asDWORD callConv, void *auxiliary=0)=0</div><div class="ttdoc">Registers a global function.</div></div>
<div class="ttc" id="aclassas_i_script_engine_html_a605f114814f1f64804c04391816d948b"><div class="ttname"><a href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">asIScriptEngine::SetDefaultNamespace</a></div><div class="ttdeci">virtual int SetDefaultNamespace(const char *nameSpace)=0</div><div class="ttdoc">Sets the current default namespace for registrations and searches.</div></div>
</div><!-- fragment --><p>If desired nested namespaces can also be used by separating them with the scoping token, ::, e.g. SetDefaultNamespace("outer::inner");</p>
<h1><a class="anchor" id="doc_adv_namespace_enum"></a>
Finding entities in namespaces</h1>
<p>As namespaces allow multiple declarations with the same signature, it is necessary to specify in which namespace a search for an entity is to be done. This is also done with the SetDefaultNamespace method. This applies to both the <a class="el" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">engine</a> and the <a class="el" href="classas_i_script_module.html#ab8629af79cee8212d0d244314d36f42a">module</a> interfaces.</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> FindFuncInNamespace(<a class="code hl_class" href="classas_i_script_module.html">asIScriptModule</a> *module)</div>
<div class="line">{</div>
<div class="line">  <span class="keywordtype">int</span> r;</div>
<div class="line"> </div>
<div class="line">  <span class="comment">// Look for the function in the namespace, i.e. myspace::myfunc</span></div>
<div class="line">  r = module-&gt;<a class="code hl_function" href="classas_i_script_module.html#ab8629af79cee8212d0d244314d36f42a">SetDefaultNamespace</a>(<span class="stringliteral">&quot;myspace&quot;</span>); assert( r &gt;= 0 );</div>
<div class="line">  <a class="code hl_class" href="classas_i_script_function.html">asIScriptFunction</a> *func1 = module-&gt;<a class="code hl_function" href="classas_i_script_module.html#af332a2474591b032bd6b6da1c951a7b2">GetFunctionByName</a>(<span class="stringliteral">&quot;myfunc&quot;</span>);</div>
<div class="line"> </div>
<div class="line">  <span class="comment">// When searching for a matching declaration the default namespace is also</span></div>
<div class="line">  <span class="comment">// used unless an explicit namespace is given in the declaration itself.</span></div>
<div class="line">  <a class="code hl_class" href="classas_i_script_function.html">asIScriptFunction</a> *funcA = module-&gt;<a class="code hl_function" href="classas_i_script_module.html#ab16a29831b08294423390a8170605523">GetFunctionByDecl</a>(<span class="stringliteral">&quot;void myfunc()&quot;</span>);</div>
<div class="line">  <a class="code hl_class" href="classas_i_script_function.html">asIScriptFunction</a> *funcB = module-&gt;<a class="code hl_function" href="classas_i_script_module.html#ab16a29831b08294423390a8170605523">GetFunctionByDecl</a>(<span class="stringliteral">&quot;void myspace::myfunc()&quot;</span>);</div>
<div class="line"> </div>
<div class="line">  assert( funcA == funcB );</div>
<div class="line">}</div>
<div class="ttc" id="aclassas_i_script_function_html"><div class="ttname"><a href="classas_i_script_function.html">asIScriptFunction</a></div><div class="ttdoc">The interface for a script function description.</div><div class="ttdef"><b>Definition:</b> angelscript.h:4000</div></div>
<div class="ttc" id="aclassas_i_script_module_html"><div class="ttname"><a href="classas_i_script_module.html">asIScriptModule</a></div><div class="ttdoc">The interface to the script modules.</div><div class="ttdef"><b>Definition:</b> angelscript.h:2232</div></div>
<div class="ttc" id="aclassas_i_script_module_html_ab16a29831b08294423390a8170605523"><div class="ttname"><a href="classas_i_script_module.html#ab16a29831b08294423390a8170605523">asIScriptModule::GetFunctionByDecl</a></div><div class="ttdeci">virtual asIScriptFunction * GetFunctionByDecl(const char *decl) const =0</div><div class="ttdoc">Returns the function by its declaration.</div></div>
<div class="ttc" id="aclassas_i_script_module_html_ab8629af79cee8212d0d244314d36f42a"><div class="ttname"><a href="classas_i_script_module.html#ab8629af79cee8212d0d244314d36f42a">asIScriptModule::SetDefaultNamespace</a></div><div class="ttdeci">virtual int SetDefaultNamespace(const char *nameSpace)=0</div><div class="ttdoc">Sets the default namespace that should be used in the following calls.</div></div>
<div class="ttc" id="aclassas_i_script_module_html_af332a2474591b032bd6b6da1c951a7b2"><div class="ttname"><a href="classas_i_script_module.html#af332a2474591b032bd6b6da1c951a7b2">asIScriptModule::GetFunctionByName</a></div><div class="ttdeci">virtual asIScriptFunction * GetFunctionByName(const char *name) const =0</div><div class="ttdoc">Returns the function by its name.</div></div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- PageDoc -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Sun May 21 2023 10:12:40 for AngelScript by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.6 </li>
  </ul>
</div>
</body>
</html>
